
package com.xtsoft.platform.base.system.repository;
/*
*    上海信拓信息技术有限公司 Koala企业综合信息管理系统
*    Copyright (C) 2010-2015 ShangHai XinTuo Software Inc.
*/



import com.xtsoft.core.repository.GenericRepository;
import com.xtsoft.platform.base.system.domain.SysResource;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.List;

@Repository
public interface SysResourceRepository extends GenericRepository<SysResource,String> {
	/**
	 * 
	 * <p>获取页面资源</p>  
	 * @return List<SysResource>
	 * @throws  
	 */
	@Query(value="SELECT a FROM SysResource a WHERE a.resourceType=1 order by serialNo ASC")
	public List<SysResource> getResourceTree();

	/**
	 * 
	 * <p> 根据资源类型、状态查找资源，序号升序排序  </p>  
	 * @param resourceType
	 * @param state
	 * @return
	 * @return Optional<List<SysResource>>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月8日 
	 * @time 下午2:28:36
	 */
	public List<SysResource> findByResourceTypeInAndStateOrderBySerialNoAsc(List<Integer> resourceType,Integer state);
	/**
	 * 
	 * <p> 根据资源类型、状态、父资源ID查找资源，序号升序排序  </p>  
	 * @param resourceType
	 * @param state
	 * @param preResourceId
	 * @return
	 * @return Optional<List<SysResource>>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月8日 
	 * @time 下午2:30:45
	 */
	public List<SysResource> findByResourceTypeAndStateAndPreResourceIdOrderBySerialNoAsc(Integer resourceType,Integer state,String preResourceId);
	
	/**
	 * 
	 * <p> 根据资源类型集合、状态集合、父资源ID查找资源，序号升序排序    </p>  
	 * @param resourceTypes
	 * @param states
	 * @param preResourceId
	 * @return
	 * @return Optional<List<SysResource>>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月8日 
	 * @time 下午2:35:18
	 */
	public List<SysResource> findByResourceTypeInAndStateInAndPreResourceIdOrderBySerialNoAsc(Collection<Integer> resourceTypes,Collection<Integer> states,String preResourceId);
	/**
	 * 
	 * <p> 根据资源ID集合获取资源集合  </p>  
	 * @param resourceIds
	 * @return
	 * @return List<SysResource>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 下午3:00:08
	 */
	public List<SysResource> findByResUniqueIdIn(List<String> resourceIds);
	/**
	 * 
	 * <p> 根据resourceId开始字串查找  </p>  
	 * @param resourceId
	 * @return
	 * @return List<SysResource>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 下午3:28:28
	 */
	public List<SysResource> findByResourceIdStartingWith(String resourceId);
	/**
	 * 
	 * <p> 根据资源Id集合删除  </p>  
	 * @param ids
	 * @return
	 * @return long
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 下午3:52:19
	 */
	@Modifying
	@Query("delete from SysResource en where en.resUniqueId in ?1")
	public Integer deleteByResUniqueIdIn(List<String> ids);
	/**
	 * 
	 * <p> 根据资源Id开始串删除  </p>  
	 * @param resourceId
	 * @return
	 * @return long
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 下午4:02:23
	 */
	public long deleteByResourceIdStartingWith(String resourceId);

	
	/**
	 * @Title: 根据resourceid查询  
	 * @Description: TODO 
	 * @param id
	 * @return SysResource   
	 * @throws  
	 * @author liuyang  
	 * @date 2018年7月30日
	 */
	public SysResource findByResourceId(String resourceId);

	@Query(value="SELECT a FROM SysResource a WHERE a.resourceType=1 AND a.preResourceId=?1")
	public List<SysResource> findByPreResourceId(String preResourceId);

	
	@Query(value="SELECT a FROM SysResource a WHERE a.resourceType in (0,2) AND a.preResourceId=?1")
	public List<SysResource> getByPreResourceId(String preResourceId);

	public List<SysResource> findByPreResourceIdAndResourceType(String resourceId, Integer resourceType);
	

		
	
	
	
}